package com.controller;

import com.context.conexion.EnahoConexion;
import util.controller.Vista;
import com.model.domain.tiempo.MesEnum;
import com.model.domain.tiempo.Periodo;
import com.model.domain.tiempo.ProgramacionPeriodo;
import com.model.service.ProgramacionPeriodoService;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONObject;

/**
 *
 * @author rdelacruz
 */
public class ProgramacionPeriodoController 
extends AbstractController
{   
    
    
    
    public void verMantenimiento(Vista v, HttpServletRequest request, HttpServletResponse response) throws Exception {        
        Connection con = null;
        try {
            con = EnahoConexion.getConexion();
            setearVerMantenimiento(con,v,request,response);
        }
        finally {
            if(con!=null) con.close();
        }  
    }
    
    public void setearVerMantenimiento(Connection con, Vista v, HttpServletRequest request, HttpServletResponse response) throws Exception {
        ProgramacionPeriodoService service = (ProgramacionPeriodoService)this.getService();
        List<Integer> anhos = service.getConglomeradoService().findAnhos(con);
        service.crearProgramacionSiNoExisteParaAnhos(con,anhos);
        request.setAttribute("anhos",anhos);
        request.setAttribute("meses", MesEnum.values());
        v.setUrl("pagweb/rutas/programacion_periodos.jsp");
    }
       
    public void guardar(Vista v, HttpServletRequest request, HttpServletResponse response) throws Exception {        
        
        List<ProgramacionPeriodo> lista = new ArrayList<ProgramacionPeriodo>();
        for(MesEnum e: MesEnum.values()) {            
            ProgramacionPeriodo filtro = new ProgramacionPeriodo();
            filtro.setAnho(request.getParameter("anho"));                
            filtro.setMes(e.getCodigoString());
            Periodo p = new Periodo();
            p.setFechaInicio(request.getParameter(e.name()));
            filtro.setPeriodo1(p);
            lista.add(filtro);
        } 
        
        request.setAttribute("comando", lista.get(0));
                
        Connection con = null;
        try {
            con = EnahoConexion.getConexion();
            ProgramacionPeriodoService service = (ProgramacionPeriodoService)this.getService();
            service.guardar_actualizar(con, lista);
            
            setearVerMantenimiento(con,v,request,response);
        }
        finally {
            if(con!=null) con.close();
        }
    }
    
    public void json(HttpServletRequest request, HttpServletResponse response) throws Exception {
         ProgramacionPeriodo filtro = new ProgramacionPeriodo();
         filtro.setAnho(request.getParameter("anho"));   
        
        Connection con = null;
        try {
            con = EnahoConexion.getConexion();
            ProgramacionPeriodoService service = (ProgramacionPeriodoService)this.getService();
            
            List<ProgramacionPeriodo> lista = service.findByFilter(con,filtro);
            
            String jsonString = "{}";
            
            if(!lista.isEmpty()) {
                JSONObject json = new JSONObject();
                for(ProgramacionPeriodo pp : lista) {
                    JSONObject jsonPeriodos = new JSONObject();
                    jsonPeriodos.put("1",pp.getPeriodo1().getFechaInicio());
                    jsonPeriodos.put("2",pp.getPeriodo2().getFechaInicio());
                    jsonPeriodos.put("3",pp.getPeriodo3().getFechaInicio());
                    jsonPeriodos.put("4",pp.getPeriodo4().getFechaInicio());
                    jsonPeriodos.put("5",pp.getPeriodo5().getFechaInicio());                            
                    json.put(pp.getMes(),jsonPeriodos);
                }                
                jsonString = json.toString();             
            }
            
            response.setContentType("application/json;charset=UTF-8");
            response.getWriter().append(jsonString);
        }
        finally {
            if(con!=null) con.close();
        }
        
    }

       
    
    
}
